package br.com.iswe.gwt.util.client;

import java.util.ArrayList;
import java.util.List;


/**
 * Classe que carrega as informacoes sobre a paginacao de dados para pesquisa.
 * 
 * @author Rafael Noronha
 */
public class QueryInfo extends RequestInfo {
	//Informacoes de Paginacao
	protected int numeroPagina  = -1;
	protected int tamanhoPagina = -1;
	
	protected List orderList = new ArrayList();
	
	private transient boolean isPaginacao = false;
	
	public QueryInfo() {
		super();
		//obtem as informacoes do usuario
		setup(ClientInfoContext.getClientInfoContext().getSessionInfo());
	}
	
	/**
	 * Cria uma instancia de QueryInfo informando uma lista de propriedades
	 * de consulta.
	 * @param listaPropriedades
	 */
	public QueryInfo(String[] listaPropriedades) {
		super(listaPropriedades);
		//obtem as informacoes do usuario
		setup(ClientInfoContext.getClientInfoContext().getSessionInfo());
	}

	public QueryInfo(String[] keyProperties, String[] propriedades) {
		String [] campos = ClientUtils.joinArrays(keyProperties, propriedades);
		setListaPropriedades(campos);
		//obtem as informacoes do usuario
		setup(ClientInfoContext.getClientInfoContext().getSessionInfo());
	}
	
	public void addOrderPropertyAsc(String property){
		orderList.add("a-" + property);
	}
	public void addOrderPropertyDesc(String property){
		orderList.add("d-" + property);
	}

	public int getNumeroPagina() {
		return numeroPagina;
	}
	public void setNumeroPagina(int numeroPagina) {
		this.numeroPagina = numeroPagina;
	}
	
	public int getTamanhoPagina() {
		return tamanhoPagina;
	}
	public void setTamanhoPagina(int tamanhoPagina) {
		this.tamanhoPagina = tamanhoPagina;
	}

	public boolean isPagingSetuped(){
		return numeroPagina  != -1 && tamanhoPagina != -1;
	}
	
	public boolean isPaginacao() {
		return isPaginacao;
	}
	public void setPaginacao(boolean isPaginacao) {
		this.isPaginacao = isPaginacao;
	}

	public List getOrderList() {
		return orderList;
	}
}